/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package documentadorrepositorio.builderDocumentacao;

import documentadorrepositorio.artefatos.Artefato;
import documentadorrepositorio.exportacaoAdapterTexto.AlinhamentoTexto;
import documentadorrepositorio.exportacaoAdapterTexto.ExportacaoTextoWord;
import documentadorrepositorio.exportacaoAdapterTexto.FonteTexto;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author DEP
 */
public class DocumentacaoModoWord extends DocumentacaoBuilder {
    
    private FonteTexto fontePadrao = null;
    private FonteTexto fonteTitulo = null;
    private FonteTexto fonteSubTitulo = null;
    
    @Override
    public void criaDocumento(String diretorio) {
        try {
            this.mecanismoExportacao = new ExportacaoTextoWord();
            this.mecanismoExportacao.setNomeArquivo(diretorio);
            this.mecanismoExportacao.criaArquivo();
            
            fontePadrao = new FonteTexto();
            fontePadrao.setNome("Arial");
            fontePadrao.setTamanho(12);
            
            fonteTitulo = new FonteTexto();
            fonteTitulo.setNegrito(Boolean.TRUE);
            fonteTitulo.setNome("Arial");
            fonteTitulo.setTamanho(14);
            
            fonteSubTitulo = new FonteTexto();
            fonteSubTitulo.setNegrito(Boolean.TRUE);
            fonteSubTitulo.setNome("Arial");
            fonteSubTitulo.setTamanho(12);
            
        } catch (Exception ex) {
        }
    }
    
    @Override    
    public void criaCapa(ArrayList<String> variaveisCapa) {
        
        try {
            
            this.mecanismoExportacao.setFonteTexto(this.fontePadrao);

            // nome instituição            
            this.mecanismoExportacao.iniciaParagrafo();
            if (variaveisCapa.get(0) != null) {
                this.mecanismoExportacao.setAlinhamento(AlinhamentoTexto.Centro);
                this.mecanismoExportacao.insereTexto(variaveisCapa.get(0).toUpperCase());
            } else {
                this.mecanismoExportacao.insereTexto("\r\n");
            }
            // pular linhas
            this.mecanismoExportacao.iniciaParagrafo();
            this.mecanismoExportacao.insereTexto("\r\n\r\n\r\n\r\n\r\n\r\n\r\n");

            // nome autor
            this.mecanismoExportacao.iniciaParagrafo();
            if (variaveisCapa.get(1) != null) {
                this.mecanismoExportacao.setAlinhamento(AlinhamentoTexto.Centro);
                this.mecanismoExportacao.insereTexto(variaveisCapa.get(1).toUpperCase());
            } else {
                this.mecanismoExportacao.insereTexto("\r\n");
            }
            // pular linhas
            this.mecanismoExportacao.iniciaParagrafo();
            this.mecanismoExportacao.insereTexto("\r\n\r\n\r\n\r\n\r\n\r\n\r\n");
            // titulo trabalho
            this.mecanismoExportacao.iniciaParagrafo();
            if (variaveisCapa.get(2) != null) {
                this.mecanismoExportacao.setFonteTexto(this.fonteTitulo);
                this.mecanismoExportacao.setAlinhamento(AlinhamentoTexto.Centro);
                this.mecanismoExportacao.insereTexto(variaveisCapa.get(2).toUpperCase());
            } else {
                this.mecanismoExportacao.insereTexto("\r\n");
            }
            
            this.mecanismoExportacao.setFonteTexto(this.fontePadrao);
            // pular linhas
            this.mecanismoExportacao.iniciaParagrafo();
            this.mecanismoExportacao.insereTexto("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n");

            // local
            this.mecanismoExportacao.iniciaParagrafo();
            if (variaveisCapa.get(3) != null) {
                this.mecanismoExportacao.setAlinhamento(AlinhamentoTexto.Centro);
                this.mecanismoExportacao.insereTexto(variaveisCapa.get(3).toUpperCase());
            } else {
                this.mecanismoExportacao.insereTexto("\r\n");
            }

            // ano          
            if (variaveisCapa.get(4) != null) {
                this.mecanismoExportacao.setAlinhamento(AlinhamentoTexto.Centro);
                this.mecanismoExportacao.insereTexto(variaveisCapa.get(4).toUpperCase());
            } else {
                this.mecanismoExportacao.insereTexto("\r\n");
            }
            
            this.mecanismoExportacao.iniciaParagrafo();
            this.mecanismoExportacao.setAlinhamento(AlinhamentoTexto.Esqueda);
            this.mecanismoExportacao.novaPagina();
            
        } catch (Exception ex) {
//            throw ex;
        }
    }
    
    private void escreveTipoArtefato(Artefato artefato) {
        mecanismoExportacao.iniciaParagrafo();
        mecanismoExportacao.setFonteTexto(fonteTitulo);
        mecanismoExportacao.insereTexto(artefato.nomePlural() + "\r\n\r\n\r\n");
    }
    
    private void escreveDetalheArtefato(Artefato artefato) {
        try {
//            mecanismoExportacao.setFonteTexto(fonteSubTitulo);
            artefato.insereDescricao(mecanismoExportacao, fontePadrao, fonteSubTitulo, fonteTitulo);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        //        if (!artefato.isTexto()) {
        //            mecanismoExportacao.insereTexto("\r\n\r\n" + artefato.toString());
        //
        //            mecanismoExportacao.insereImagem(artefato.getBytesArtefato().toByteArray());
        //            //mecanismoExportacao.a
        //            mecanismoExportacao.iniciaParagrafo();
        //            //mecanismoExportacao.insereTexto("\r\n");
        //        } else {
        //            mecanismoExportacao.insereTexto(artefato.toString() + "\r\n");
        //            try {
        //                mecanismoExportacao.setFonteTexto(fontePadrao);
        //                mecanismoExportacao.insereTexto(IOUtil.obtemString(artefato.getBytesArtefato().toByteArray()) + "\r\n\r\n");
        //            } catch (Exception e) {
        //            }
        //        }
    }
    
    @Override
    void imprimeArtefatos(List<Artefato> artefatos) {
        
        try {
            Artefato artefatoAtual = null;
            //     artefatos = DescritorUtil.ordenaArtefatos(artefatos);
            if (!artefatos.isEmpty()) {
                artefatoAtual = artefatos.get(0);
                escreveTipoArtefato(artefatoAtual);
            }
            
            for (Artefato artefato : artefatos) {
                if (artefato.getTipo().compareToIgnoreCase(artefatoAtual.getTipo()) == 0) {
                    artefato.insereDescricao(mecanismoExportacao, fontePadrao, fonteSubTitulo, fonteTitulo);
                    if (!artefato.getArtefatos().isEmpty()) {
                        for (Artefato art : artefato.getArtefatos()) {
                            art.insereDescricao(mecanismoExportacao, fontePadrao, fonteSubTitulo, fonteTitulo);
                        }
                    }
                } else {
                    artefatoAtual = artefato;
                    mecanismoExportacao.novaPagina();
                    escreveTipoArtefato(artefato);
                    escreveDetalheArtefato(artefato);
                }
//
//                if (artefato instanceof Rastreabilidade) {
//                    escreveRastreabilidade(artefato);
//                } else {
//                    if (artefato.getSiglaArtefato().compareToIgnoreCase(artefatoAtual.getSiglaArtefato()) == 0) {
//                        escreveDetalheArtefato(artefato);
//                    } else {
//                        artefatoAtual = artefato;
//                        mecanismoExportacao.novaPagina();
//                        escreveTipoArtefato(artefato);
//                        escreveDetalheArtefato(artefato);
//                    }
//                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
//
//    private void escreveRastreabilidade(Artefato artefato) {
//        mecanismoExportacao.novaPagina();
//        mecanismoExportacao.iniciaParagrafo();
//        mecanismoExportacao.setFonteTexto(fonteTitulo);
//        mecanismoExportacao.insereTexto("Rastreabilidade \r\n\r\n\r\n");
//
//        Workbook excel = IOUtil.obtemWorkbook(artefato.getBytesArtefato().toByteArray());
//        if (excel != null) {
//            for (Sheet planilha : excel.getSheets()) {
//                mecanismoExportacao.iniciaParagrafo();
//                mecanismoExportacao.setFonteTexto(fonteSubTitulo);
//                mecanismoExportacao.insereTexto(planilha.getName());
//                mecanismoExportacao.setFonteTexto(fontePadrao);
//                mecanismoExportacao.insereTabela(planilha);
//            }
//        }
//        mecanismoExportacao.novaPagina();
//    }
}
